@REM 这是一个用于烧录程序的批处理文件，请不要修改！！
@REM 

@REM 关闭回显

echo off

@REM 清除屏幕

cls

@REM 修改编码为UTF-8

chcp 65001

@REM 显示当前时间

date /t

echo 程序开始执行

@REM 必要的初始化参数,可根据实际情况修改
set TOOL_NAME=STM32_Programmer_CLI.exe
set TOOL_PORT=jlink
set TOOL_SPEED=4000

@REM 0x1FFF7590 G0芯片的SN地址
set CHIP_SNADDR=0x1FFFF7E8


@REM ////////////////////////////  以下内容不需要修改  //////////////////////////////////
@REM 参数初始化
set CMDSTR=%TOOL_NAME% -c port=%TOOL_PORT% freq=%TOOL_SPEED% 


@REM %TOOL_NAME% -l
@REM %CMDSTR%

@REM %CMDSTR% -score
@REM %CMDSTR% -run
@REM %CMDSTR% -coreReg
@REM %CMDSTR% -rdu
@REM %CMDSTR% -e all
@REM %CMDSTR% -r32 %CHIP_SNADDR% 0xc sn.txt
@REM %CMDSTR% -r %CHIP_SNADDR% 0xc sn.bin
@REM start sn.bin
@REM start crc32_mpeg22.exe


@REM bin 文件转化成string 输出
@REM btos.exe sn.bin
@REM for /f %%a in ('btos.exe sn.bin') do (
@REM     set SN=%%a
@REM )
@REM echo  读取出来的结果 %SN%
@REM crc32_mpeg2.exe %SN%
@REM exit

@REM goto :autoBurn

@REM 菜单程序
:menu
echo 1.烧录程序

echo 2.全片擦除

echo 3.获取设备SN号码

echo 4.解除设备读保护

echo 5.获取寄存器状态

echo 6.读取指定地址数据

echo 7.重启设备

echo 8.全自动化测试

echo 777.带参数测试

echo 0.退出

set /p SELECT=请选择操作:

@REM ///////////// 主循环  /////////////
:loop
if %SELECT%==1 (
    cls
    echo 开始烧录程序
    call :burn
) 
if %SELECT%==2 (
    cls
    echo 开始全片擦除
    call :eraseAll
)
if %SELECT%==3 (
    cls
    echo 获取设备SN号码...
    call :getsn
)
if %SELECT%==4 (
    cls
    echo 解除设备读保护...
    call :unlockOnlyRead
)
if %SELECT%==5 (
    cls
    echo 获取寄存器状态...
    call :getReg
)
if %SELECT%==6 (
    cls
    echo 读取指定地址数据...
    call :readData
)
if %SELECT%==7 (
    cls
    echo 重启设备...
    call :restart
)
if %SELECT%==8 (
    cls
    echo 开始自动化测试...
    call :autoBurn
)
if %SELECT%==777 (
    cls
    echo 测试参数...
    call :test
)
if %SELECT%==0 (
    echo 烧录工具程序已退出
    exit
)
call :menu
 

@REM 以下内容为各程序片段，非必要无需修改
@REM /////////////  烧录程序  /////////////
:burn

if "%~1"=="" (
    set /p BURN_FILE=请输入烧录文件:
) else (
    set BURN_FILE=%~1
)

if "%~2"=="" (
    set /p BURN_ADDR=请输入烧录地址:
) else (
    set BURN_ADDR=%~2
)

if  "%BURN_FILE%"=="" (
    echo 未指定烧录文件，请重新输入
    goto :burn
)
if  "%BURN_ADDR%"=="" (
    echo 未指定烧录地址，请重新输入
    goto :burn
)

@REM 命令烧录文件
echo 文件开始烧录，请耐心等待... 参数如下 file[%BURN_FILE%] addr[%BURN_ADDR%]
%CMDSTR% -w %BURN_FILE%  %BURN_ADDR%
echo 执行结果 %errorlevel%
goto :menu

@REM /////////////  获取设备SN号码  /////////////
:getsn
echo 获取设备SN号码...
%CMDSTR% -r %CHIP_SNADDR% 12 sn.bin
start crc32_mpeg22.exe
goto :menu


@REM /////////////  解除设备读保护  /////////////
:unlockOnlyRead
echo 解除设备读保护...
%CMDSTR% -rdu 
goto :menu

@REM /////////////  全片擦除  /////////////
:eraseAll
echo 开始全片擦除...
%CMDSTR% -e all
goto :menu


@REM /////////////  获取寄存器状态  /////////////
:getReg
echo 获取寄存器状态...
%CMDSTR% -ob unlockchip displ
goto :menu

@REM /////////////  读取指定地址数据  /////////////
:readData
set /p READ_ADDR=请输入读取地址:
set /p READ_LEN=请输入读长度:
%CMDSTR% -r %READ_ADDR% %READ_LEN%  read.bin
start read.bin
goto :menu

@REM /////////////  带参数测试  /////////////
:test
call :burn 1 100


@REM /////////////  重启设备  /////////////
:restart
%CMDSTR% -run 
goto :menu

@REM /////////////  全自动化测试  /////////////
:autoBurn

@REM %TOOL_NAME% -l 
@REM %TOOL_NAME% -c port=jlink freq=4000 ap=0
@REM %TOOL_NAME% -r 0x8004000 12 

@REM %CMDSTR% ap=0 -rst -r 0x8004000 12 

@REM %CMDSTR% ap=0 -hardRst
@REM %CMDSTR% -rst
@REM %CMDSTR% -run
@REM %CMDSTR% -e all
@REM %CMDSTR% -rst
@REM %CMDSTR% -run


@REM exit

echo 获取设备SN号码...
%CMDSTR% -r %CHIP_SNADDR% 12 sn.bin
echo 计算CRC32校验码...
start crc32_mpeg22.exe

echo 烧录参数...
%CMDSTR% -w param.bin  0x8004000

echo 烧录引导程序...
%CMDSTR% -w boot.bin  0x8000000

echo 烧录应用程序...
%CMDSTR% -w app.bin  0x8004800

echo 设备重启...
%CMDSTR% -run

exit
